using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ParcelTools
{
    /// <summary>
    /// <para>Merge Collinear Parcel Boundaries</para>
    /// <para>Merges  connected collinear parcel lines  into a single parcel line.
    ///   Shared parcel fabric points between connected collinear lines are deleted and vertices are created in their place.</para>
    /// <para>将连接的共线宗地线合并为单个宗地线。
    /// 将删除连接的共线之间的共享宗地结构点，并在其位置创建折点。</para>
    /// </summary>    
    [DisplayName("Merge Collinear Parcel Boundaries")]
    public class MergeCollinearParcelBoundaries : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public MergeCollinearParcelBoundaries()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_parcel_boundaries">
        /// <para>Input Parcel Boundaries</para>
        /// <para>The parcel lines to be merged. Lines can be parcel lines or connection lines.</para>
        /// <para>要合并的宗地行。线可以是宗地线或连接线。</para>
        /// </param>
        /// <param name="_offset_tolerance">
        /// <para>Offset Tolerance</para>
        /// <para>The maximum distance shared parcel points can be offset from their connected lines for the lines to be considered collinear. The offset is the distance between the shared parcel points and the straight lines between the endpoints of the connected parcel lines.</para>
        /// <para>共享宗地点的最大距离可以从其连接的线偏移，以使线被视为共线。偏移量是共享宗地点与连接宗地线的端点之间的直线之间的距离。</para>
        /// </param>
        public MergeCollinearParcelBoundaries(object _in_parcel_boundaries, string _offset_tolerance)
        {
            this._in_parcel_boundaries = _in_parcel_boundaries;
            this._offset_tolerance = _offset_tolerance;
        }
        public override string ToolboxName => "Parcel Tools";

        public override string ToolName => "Merge Collinear Parcel Boundaries";

        public override string CallName => "parcel.MergeCollinearParcelBoundaries";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_parcel_boundaries, _offset_tolerance, _out_parcel_boundaries];

        /// <summary>
        /// <para>Input Parcel Boundaries</para>
        /// <para>The parcel lines to be merged. Lines can be parcel lines or connection lines.</para>
        /// <para>要合并的宗地行。线可以是宗地线或连接线。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Parcel Boundaries")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_parcel_boundaries { get; set; }


        /// <summary>
        /// <para>Offset Tolerance</para>
        /// <para>The maximum distance shared parcel points can be offset from their connected lines for the lines to be considered collinear. The offset is the distance between the shared parcel points and the straight lines between the endpoints of the connected parcel lines.</para>
        /// <para>共享宗地点的最大距离可以从其连接的线偏移，以使线被视为共线。偏移量是共享宗地点与连接宗地线的端点之间的直线之间的距离。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Offset Tolerance")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public string _offset_tolerance { get; set; }


        /// <summary>
        /// <para>Updated Parcel Boundaries</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Parcel Boundaries")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_parcel_boundaries { get; set; }


        public MergeCollinearParcelBoundaries SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}